import axios from "axios";
import router from "@/router";

axios.defaults.headers["content-type"] = "application/x-www-form-urlencoded";

// 创建一个自定义的Axios对象
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  // baseURL: "http://192.168.0.19:9006",
  // baseURL: "http://192.168.0.19:9008",
  // baseURL: "http://192.168.0.19:9009",
  baseURL: "http://140.210.204.180:9008",
  // baseURL: "http://140.210.204.180:8888",

  // baseURL: "/backend",  // 华为云
  //   超时  单位ms
  timeout: 5000,

  /*这个配置很重要，允许axios携带用户Cookie到后端，不设置这个的话
    Set-Cookie是无效的,除此之外,Chrome默认开启了SameSite检查，如果
    后端不主动设置SameSite = none,Set-Cookie是无效的。详情请文章末尾
    参考阮老师的SameSite讲解*/
  //   withCredentials: true,
});

// 请求拦截
// 配置请求拦截器
service.interceptors.request.use(
  (config) => {
    // 为当前请求配置Token认证字段
    // config.headers.Authorization = 'Bearer xxx'

    // config.headers['token'] = sessionStorage.getItem('token')
    // config.headers['Authorization'] = window.sessionStorage.getItem('token')
    config.headers.token = sessionStorage.getItem("token");

    // config.headers.token = sessionStorage.getItem('token')
    console.log(config);
    // const time = Math.round(new Date().getTime() / 1000);
    // const random = Math.round(Math.random() * 1000000);
    // const sig = md5(`${time}${random}`);
    // config.headers["Sig"] = sig;
    // config.headers["Time"] = time;
    // config.headers["Random"] = random;
    return config;
  },
  (error) => {
    console.log(error);
    // return Promise.reject(error);
  }
);

// 响应拦截
// service.interceptors.response.use((response) => {
//   const { data: { data, code, status, error = {} } = {} } = response;
//   if (code === "400") {
//     return Promise.reject(error.code);
//   }
// });
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    const code = response.data.code || 200;
    switch (code) {
      case 200:
        return response.data; //成功直接返回
    }
    // switch (code) {
    //   case 401:sessionStorage.clear()

    // }
    return res;
  },
  (error) => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          sessionStorage.clear();
          router.replace({ path: "/" });
          ElMessage({
            type: "warning",
            message: "登录已过期，请重新登录",
          });
      }
    }
    return Promise.reject(error.response);
  }
);

//暴露Axios实例化对象，允许所有文件调用Axios
export default service;
